home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 February / PCWFEB08.iso / Software / Freeware / Miro 1.0 / Miro_Installer.exe / chrome / content / startup.js < prev    next >
Encoding:
JavaScript  |  2007-11-12  |  7.0 KB  |  226 lines

  1. /*
  2. # Miro - an RSS based video player application
  3. # Copyright (C) 2005-2007 Participatory Culture Foundation
  4. #
  5. # This program is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation; either version 2 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  18. */
  19.  
  20. var pybridge = Components.classes["@participatoryculture.org/dtv/pybridge;1"].
  21.                 getService(Components.interfaces.pcfIDTVPyBridge);
  22.  
  23. function writelog(str) {
  24.     Components.classes['@mozilla.org/consoleservice;1']
  25.     .getService(Components.interfaces.nsIConsoleService)    
  26.     .logStringMessage(str);
  27. }
  28.  
  29. var initialButton;
  30. var inSearch = false;
  31. var searchSuccess = false;
  32. var cancelled = false;
  33. var finished = false;
  34. var wizard;
  35. var homedir;
  36. function onload() {
  37.     wizard = getWidget("democracy-startup");
  38.     initialButton = wizard.getButton("finish").label;
  39.     homedir = pybridge.getSpecialFolder("My Documents");
  40.     setSearchDir(homedir);
  41.     
  42.     wizard.getButton("cancel").disabled = true;
  43.     wizard.getButton("cancel").style.display = "none";
  44.     updateUI();
  45. }
  46.  
  47. function onwizardfinish() {
  48.     if(finished) {
  49.       return; 
  50.       // User hit the Finish button quickly and we got this callback twice
  51.     } else {
  52.       finished = true;
  53.     }
  54.     var autoStartYes = getWidget("radiogroup-autostart-yes");
  55.     pybridge.setRunAtStartup(autoStartYes.selected);
  56.     pybridge.setStartupTasksDone(true);
  57.     var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
  58.             .getService(Components.interfaces.nsIWindowWatcher);
  59.     var startupTasksURL = "chrome://dtv/content/startup.xul";
  60.     wwatch.openWindow(null, "chrome://dtv/content/main.xul",
  61.             "DemocracyPlayer", "chrome,dialog=yes,all", null);
  62. }
  63.  
  64. function searchPossible() {
  65.     if (! getWidget("radio-search-yes").selected)
  66.     return false;
  67.     return !searchSuccess;
  68. }
  69.  
  70. function updateUI ()
  71. {
  72.     if(!wizard) return; // onload hasn't been called yet
  73.     if (inSearch) {
  74.     wizard.canAdvance = false;
  75.     wizard.canRewind = false;
  76.     } else {
  77.     wizard.canAdvance = true;
  78.     wizard.canRewind = true;
  79.     }
  80.     wizard.getButton("finish").label = initialButton;
  81.     if (wizard.currentPage.id == "page-search") {
  82.     var meter = getWidget("progressmeter-search-progress");
  83.     if (searchSuccess) {
  84.         meter.mode = "determined";
  85.         meter.value = 100;
  86.     } else if (inSearch) {
  87.         meter.mode = "undetermined";
  88.     } else {
  89.         meter.mode = "determined";
  90.         meter.value = 0;
  91.     }
  92.     if (inSearch || searchSuccess) {
  93.         getWidget("radio-search-yes").disabled = true;
  94.         getWidget("radio-search-no").disabled = true;
  95.         getWidget("radio-search-location-restrict").disabled = true;
  96.             getWidget("radio-search-location-custom").disabled = true;
  97.         getWidget("textbox-search-directory").disabled = true;
  98.         getWidget("button-search-directory").disabled = true;
  99.         getWidget("description-search-progress").disabled = false;
  100.         getWidget("progressmeter-search-progress").disabled = false;
  101.             var searchCancel = getWidget("button-search-cancel");
  102.             searchCancel.disabled = false;
  103.             if(inSearch) {
  104.                searchCancel.label = searchCancel.getAttribute("cancel-label");
  105.             } else {
  106.                searchCancel.label = searchCancel.getAttribute("undo-label");
  107.             }
  108.     } else {
  109.         getWidget("radio-search-yes").disabled = false;
  110.         getWidget("radio-search-no").disabled = false;
  111.         toggledEnable("radio-search-yes", "radio-search-location-restrict");
  112.         toggledEnable("radio-search-yes", "radio-search-location-custom");
  113.         doubleToggledEnable("radio-search-yes", "radio-search-location-custom", "textbox-search-directory");
  114.         doubleToggledEnable("radio-search-yes", "radio-search-location-custom", "button-search-directory");
  115.         getWidget("description-search-progress").disabled = true;
  116.         getWidget("progressmeter-search-progress").disabled = true;
  117.         getWidget("button-search-cancel").disabled = true;
  118.     }
  119.     if (searchPossible()) {
  120.         wizard.getButton("finish").label = "Search";
  121.     }
  122.     }
  123. }
  124.  
  125. function onsearchcancel ()
  126. {
  127.     pybridge.startupCancelSearch()
  128.     getWidget("vbox-startup-search").setAttribute('collapsed', 'true');
  129. }
  130.  
  131. function onsearch ()
  132. {
  133.     if (searchPossible()) {
  134.     var path;
  135.     if (getWidget("radio-search-location-custom").selected) {
  136.         path = getWidget("textbox-search-directory").abspath;
  137.     } else {
  138.         path = homedir;
  139.         }
  140.     getWidget("vbox-startup-search").removeAttribute('collapsed');
  141.     inSearch = true;
  142.     updateUI();
  143.     pybridge.startupDoSearch(path);
  144.     return (false);
  145.     } else {
  146.     return (true);
  147.     }
  148. }
  149.  
  150. function setSearchProgressMessage(message) {
  151.     var searchProgress = getWidget('description-search-progress');
  152.     while(searchProgress.firstChild) {
  153.         searchProgress.removeChild(searchProgress.firstChild);
  154.     }
  155.     searchProgress.appendChild(document.createTextNode(message));
  156. }
  157.  
  158. function updateSearchProgress (message)
  159. {
  160.     setSearchProgressMessage(message);
  161. }
  162.  
  163. function searchFinished (message)
  164. {
  165.     inSearch = false;
  166.     searchSuccess = true;
  167.     setSearchProgressMessage(message);
  168.     updateUI();
  169. }
  170.  
  171. function searchCancelled ()
  172. {
  173.     inSearch = false;
  174.     searchSuccess = false;
  175.     setSearchProgressMessage('');
  176.     updateUI();
  177. }
  178.  
  179.  
  180. function toggledEnable (toggle, widget)
  181. {
  182.     toggle = getWidget (toggle);
  183.     widget = getWidget (widget);
  184.     if (toggle.selected) {
  185.         widget.disabled = false;
  186.     } else {
  187.     widget.disabled = true;
  188.     }
  189. }
  190.  
  191. function doubleToggledEnable (toggle1, toggle2, widget)
  192. {
  193.     toggle1 = getWidget (toggle1);
  194.     toggle2 = getWidget (toggle2);
  195.     widget = getWidget (widget);
  196.     if (toggle1.selected && toggle2.selected) {
  197.         widget.disabled = false;
  198.     } else {
  199.     widget.disabled = true;
  200.     }
  201. }
  202.  
  203. function setSearchDir(directory) {
  204.     var searchDirBox = document.getElementById('textbox-search-directory');
  205.     searchDirBox.abspath = directory;
  206.     searchDirBox.value = pybridge.shortenDirectoryName(directory);
  207. }
  208.  
  209. function selectSearchDirectory() {
  210.     var fp = Components.classes["@mozilla.org/filepicker;1"]
  211.     .createInstance(Components.interfaces.nsIFilePicker);
  212.  
  213.     fp.init(window, "Select custom search directory",
  214.             Components.interfaces.nsIFilePicker.modeGetFolder);
  215.     var res = fp.show();
  216.     if (res == Components.interfaces.nsIFilePicker.returnOK){
  217.         setSearchDir(fp.file.path);
  218.     }
  219.  
  220. }
  221.  
  222. function getWidget(widgetID)
  223. {
  224.     return document.getElementById(widgetID);
  225. }
  226.